This set of macros provides a means of writing portable procedures that
accept variable argument lists. Routines having variable argument lists
(such as _p_r_i_n_t_f(3)) that do not use varargs are inherently nonportable,
since different machines use different argument passing conventions.
PLEASE NOTE: varargs is being supplanted by stdarg(5). Users should
reference that man page for the recommended method of passing variable
argument lists.
vvvvaaaa____aaaalllliiiisssstttt is used in a function header to declare a variable argument
list.
vvvvaaaa____ddddccccllll is a declaration for vvvvaaaa____aaaalllliiiisssstttt. Note that there is no semicolon
after vvvvaaaa____ddddccccllll....
vvvvaaaa____lllliiiisssstttt is a type which can be used for the variable _p_v_a_r, which is used
to traverse the list. One such variable must always be declared.
vvvvaaaa____ssssttttaaaarrrrtttt(pvar) is called to initialize _p_v_a_r to the beginning of the list.
vvvvaaaa____aaaarrrrgggg(_p_v_a_r, _t_y_p_e) will return the next argument in the list pointed to
by _p_v_a_r. _T_y_p_e is the type to which the expected argument will be
converted when passed as an argument. In standard C, arguments that are
cccchhhhaaaarrrr or sssshhhhoooorrrrtttt should be accessed as iiiinnnntttt, uuuunnnnssssiiiiggggnnnneeeedddd cccchhhhaaaarrrr or uuuunnnnssssiiiiggggnnnneeeedddd sssshhhhoooorrrrtttt
are converted to uuuunnnnssssiiiiggggnnnneeeedddd iiiinnnntttt, and ffffllllooooaaaatttt arguments are converted to
ddddoooouuuubbbblllleeee. Different types can be mixed, but it is up to the routine to
know what type of argument is expected, since it cannot be determined at
runtime.
vvvvaaaa____eeeennnndddd(_p_v_a_r) is used to finish up.
Multiple traversals, each bracketed by vvvvaaaa____ssssttttaaaarrrrtttt ... vvvvaaaa____eeeennnndddd,,,, are